<?php
	class ArticulosController extends AppController {

		var $name = 'Articulos';
		var $helpers = array('Paginator', 'Ajax', 'Javascript', 'Foto');
		var $paginate = array(
			'Articulo' => array (
				'limit' => 25,
				'order' => array(
					'Articulo.detalle' => 'asc',
				)
			)
		);

		function index() {
			$this->helpers[] = 'Foto';
			$this -> Articulo -> recursive = 0;
			$this -> set('articulos', $this -> paginate());
		}

		function view($id = null) {
			if(!$id) {
				$this -> Session -> setFlash(__('Invalid articulo', true));
				$this -> redirect(array('controller' => 'ubicados', 'action' => 'index'));
			}
			$this -> set('ubicacion', $this -> Articulo -> Ubicado -> find('first', array('conditions' => array('Ubicado.articulo_id' => $id, 'Ubicado.estado' => false))));
			$this -> set('articulo', $this -> Articulo -> read(null, $id));
		}

		function add() {
			if(!empty($this -> data)) {
				$this -> Articulo -> create();
				if($this -> Articulo -> save($this -> data)) {
					$this -> Session -> setFlash(__('The articulo has been saved', true));
					$this -> redirect(array('action' => 'index'));
				} else {
					$this -> Session -> setFlash(__('The articulo could not be saved. Please, try again.', true));
				}
			}
		}

		function edit($id = null) {
			if(!$id && empty($this -> data)) {
				$this -> Session -> setFlash(__('Invalid articulo', true));
				$this -> redirect(array('action' => 'index'));
			}
			if(!empty($this -> data)) {
				if($this -> Articulo -> save($this -> data)) {
					$this -> Session -> setFlash(__('The articulo has been saved', true));
					$this -> redirect(array('action' => 'index'));
				} else {
					$this -> Session -> setFlash(__('The articulo could not be saved. Please, try again.', true));
				}
			}
			if(empty($this -> data)) {
				$this -> data = $this -> Articulo -> read(null, $id);
			}
		}

		function delete($id = null) {
			if(!$id) {
				$this -> Session -> setFlash(__('Invalid id for articulo', true));
				$this -> redirect(array('action' => 'index'));
			}
			if($this -> Articulo -> delete($id)) {
				$this -> Session -> setFlash(__('Articulo deleted', true));
				$this -> redirect(array('action' => 'index'));
			}
			$this -> Session -> setFlash(__('Articulo was not deleted', true));
			$this -> redirect(array('action' => 'index'));
		}

		function actualizar() {
			if(!empty($this -> data)) {
				$nombreArchivo = 'articulos.csv';
				$uploaddir = TMP . '/uploads/Articulo/';
				$uploadfile = $uploaddir . $nombreArchivo;

				if(move_uploaded_file($this -> data['Articulo']['archivo']['tmp_name'], $uploadfile)) {
					// $this -> Session -> setFlash("Archivo subido correctamente.");
					// $this -> redirect( array('action' => 'actualizar'));

					if($nuevos = $this -> Articulo -> actualizar($nombreArchivo)) {
						$this -> Session -> setFlash($nuevos . ' ' . __("artículos fueron actualizados.", true));
					} else {
						$this -> Session -> setFlash(__("No se actualizó ningún artículo porque no se encontraron diferencias.", true));
					}
				} else {
					$this -> Session -> setFlash("Ocurrió un problema subiendo el archivo.");
				}
			}
		}

		function autoComplete() {
			//Partial strings will come from the autocomplete field as
			//$this->data['Post']['subject']
			$this -> set('articulos', 
				Set::combine(
					$this -> Articulo -> find('all', array(
						'conditions' => array('Articulo.detalle LIKE' => $this -> data['Articulo']['detalle'] . '%'),
						'fields' => array(
										'Articulo.codigo',
										'Articulo.detalle')
						), 
						'Articulo.detalle'),
					"{n}.Articulo.codigo","{n}.Articulo.detalle")
					);
			$this -> layout = 'ajax';
		}
		
		function listar_desubicados() {
			# busco los articulos que ya están ubicados
			$ubicados = $this -> Articulo -> Ubicado -> find('list', array('fields' => array('Ubicado.articulo_id')));
			# seteo los articulos que no están ubicados
			$this->set('articulos', $this -> paginate('Articulo', array('NOT' => 
						array('Articulo.id' => $ubicados))));
		}

		public function fotografiar($id = null) {
			if(!$id && empty($this -> data)) {
				$this -> Session -> setFlash(__('Artículo inválido', true));
				$this -> redirect(array('action' => 'index'));
			}
			if(!empty($this -> data)) {
				# Obtengo el nombre del archivo
				$nombreArchivo = $this -> data['Articulo']['archivo']['name'];
				# Defino el directorio donde se va a subir la foto
				$uploaddir = IMAGES_URL . 'articulos/';
				# Defino la ruta completa
				$uploadfile = $uploaddir . $nombreArchivo;
				
				# Verifico la existencia de la foto 
				if(!(file_exists($uploadfile . '.jpg') || file_exists($uploadfile . '.png'))) {
					# Si no existe en el directorio, la copio dentro del directorio
					if(!move_uploaded_file($this -> data['Articulo']['archivo']['tmp_name'], $uploadfile)) {
						# Si hubo algún error subiendo el archivo, se le informa al usuario
						$this -> Session -> setFlash("Hubo un problema subiendo la foto.");
						$this -> redirect( array('action' => 'fotografiar'));
					}
				}
				
				# Una vez que la foto ya se encuentra en el directorio, 
				# se procede a actualizar el registro del artículo con la nueva foto.
				# Notar que si la foto ya existe, no se sube nuevamente sino que se utiliza la misma
				# e igualmente se actualiza el artículo con esa foto.
				$this -> data['Articulo']['foto'] = substr($nombreArchivo, 0, strlen($nombreArchivo) - 4);
				if($this -> Articulo -> save($this -> data)) {
					$this -> Session -> setFlash(__('El artículo ha sido actualizado', true));
					$this -> redirect(array('action' => 'index'));
				} else {
					$this -> Session -> setFlash(__('Hubo un problema actualizando el artículo.', true));
				}
			}
			if(empty($this -> data)) {
				$this -> data = $this -> Articulo -> read(null, $id);
			}
 		}
	
		public function get_foto($id = null) {
			$this -> layout = 'ajax';
			if($id) {
				$this -> set('articulo', $this -> Articulo -> findById($id));
				$this -> render("/elements/get_foto");
			}
		}

		public function get_codigo($id = null) {
			$this -> layout = 'ajax';
			if($id) {
				$this -> set('articulo', $this -> Articulo -> findById($id));
				$this -> render("/elements/get_codigo");
			}
		}

	}
?>